<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 继承 
        // 1.封装  2.继承 3.多态
        // ES5继承 
        //  构造函数继承  
        //  原型需要继承，处理原型引用问题；
        // function Dad(name,age){
        //     this.name = name;
        //     this.age = age;
        // }

        // Dad.prototype.fn = function(){
        //     console.log("fn");
        // }
        // // ES5继承 call apply bind改变this指向
        // function Son(name,age){
        //     Dad.call(this,name,age);
        //     this.heigth = "178cm";
        // }
        // // Son.prototype = Dad.prototype;  // 造成引用 
        // function Link(){};
        // Link.prototype = Dad.prototype;
        // Son.prototype = new Link();
        // Son.prototype.constructor = Son; //Son固有属性 constructor 重新指回来
        // // console.log(zhangsan);
        // // zhangsan.fn();
        // Son.prototype.fn = function(){
        //     console.log("子类fn");
        // }
        // let zhangsan = new Son("张三",20);
        // zhangsan.fn();

        // let dad = new Dad();
        // dad.fn();


        // ES6的继承 ；
        class Dad {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            fn() {
                console.log("fn");
            }
        }

        // 子类继承父类  extends 关键字 
        // 一旦写了 constructor 那么一定要调用super函数； super
        // super特征：
        /* 
            1.super 不能单独使用,只能在 constructor 和 方法里
            2.super可以用于父类的传参 
            3.必须要在使用this之前调用super
            4.如果 没有constructor 函数 那么 super可以省略
        */
        class Son extends Dad {
            constructor(name, age) {
                // console.log(super);
                super(name, age);
                this.height = "178cm";
            }
            myfn() {
                console.log("myfn");
                super.fn();
            }
        }

        let zhangsan = new Son("张三", 20);
        console.log(zhangsan);
        // zhangsan.fn();
        zhangsan.myfn();
    </script>
</body>

</html>